From: Stéphane Démurget Date: Thu, 1 Nov 2012 15:19:17 +0000 (+0100) Subject: Disable the login button when there is no input X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5498 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ae0821e07b93b79083c3e9fdd1ebdf3e201de9fa;p=gnome-shell.git Disable the login button when there is no input You can't login until something has been entered in the password field. We should therefore make the login button insensitive until you have entered some text. https://bugzilla.gnome.org/show_bug.cgi?id=687112 --- diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js index b3240fc48..ffd20a01f 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -731,6 +731,7 @@ const LoginDialog = new Lang.Class({ x_align: St.Align.START }); this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry', can_focus: true }); + this._promptEntryTextChangedId = 0; this._promptBox.add(this._promptEntry, { expand: true, x_fill: true, @@ -901,21 +902,31 @@ const LoginDialog = new Lang.Class({ _showPrompt: function() { let hold = new Batch.Hold(); - let buttons = [{ action: Lang.bind(this, this.cancel), - label: _("Cancel"), - key: Clutter.Escape }, - { action: Lang.bind(this, function() { - hold.release(); - }), - label: C_("button", "Sign In"), - default: true }]; + let cancelButtonInfo = { action: Lang.bind(this, this.cancel), + label: _("Cancel"), + key: Clutter.Escape }; + let okButtonInfo = { action: Lang.bind(this, function() { + hold.release(); + }), + label: C_("button", "Sign In"), + default: true }; let tasks = [function() { return this._fadeInPrompt(); }, function() { - this.setButtons(buttons); + this.setButtons([cancelButtonInfo, okButtonInfo]); + + let updateOkButtonEnabled = Lang.bind(this, function() { + let sensitive = this._promptEntry.text.length > 0; + okButtonInfo.button.reactive = sensitive; + okButtonInfo.button.can_focus = sensitive; + }); + + updateOkButtonEnabled(); + + this._promptEntryTextChangedId = this._promptEntry.clutter_text.connect('text-changed', updateOkButtonEnabled); }, hold]; @@ -928,6 +939,11 @@ const LoginDialog = new Lang.Class({ _hidePrompt: function() { this.setButtons([]); + if (this._promptEntryTextChangedId > 0) { + this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId); + this._promptEntryTextChangedId = 0; + } + let tasks = [function() { return GdmUtil.fadeOutActor(this._promptBox); }, diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js index a902563f5..30699d9eb 100644 --- a/js/ui/unlockDialog.js +++ b/js/ui/unlockDialog.js @@ -151,6 +151,9 @@ const UnlockDialog = new Lang.Class({ ShellEntry.addContextMenu(this._promptEntry, { isPassword: true }); this.setInitialKeyFocus(this._promptEntry); this._promptEntry.clutter_text.connect('activate', Lang.bind(this, this._doUnlock)); + this._promptEntry.clutter_text.connect('text-changed', Lang.bind(this, function() { + this._updateOkButtonSensitivity(this._promptEntry.text.length > 0); + })); this._promptLayout.add(this._promptEntry, { expand: true, @@ -203,6 +206,10 @@ const UnlockDialog = new Lang.Class({ _updateSensitivity: function(sensitive) { this._promptEntry.reactive = sensitive; this._promptEntry.clutter_text.editable = sensitive; + this._updateOkButtonSensitivity(sensitive && this._promptEntry.text.length > 0); + }, + + _updateOkButtonSensitivity: function(sensitive) { this._okButton.button.reactive = sensitive; this._okButton.button.can_focus = sensitive; },